home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 8446 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.4 KB  |  81 lines

  1. Path: surfnet.nl!sun4nl!xs4all!falstaff
  2. From: falstaff@xs4all.nl (Falstaff)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Calling a Function Twice from a printf statement.
  5. Date: 4 Mar 1996 11:10:24 GMT
  6. Organization: XS4ALL, networking for the masses
  7. Message-ID: <4hej30$se4@news.xs4all.nl>
  8. References: <4he6q9$6r6@newsbf02.news.aol.com>
  9. NNTP-Posting-Host: xs1.xs4all.nl
  10. X-Newsreader: NN version 6.5.0 #666 (NOV)
  11.  
  12. razine@aol.com (Razine) writes:
  13.  
  14. >I am trying to call a function twice from my program on the same printf
  15. >line and have run into a small problem.  i was wondering if someone can
  16. >explain how to fix it.
  17.  
  18.  
  19. >void main(void) {
  20.  
  21. >   printf("First Number is %d , the Second s %d \n",num(0),num(1));
  22.  
  23. >}
  24.  
  25. >int num(int index) {
  26. >   int return_number;
  27. >   
  28. >   switch(index) {
  29. >       case 0 : return_number=0;
  30. >       case 1 : return_number=1;
  31. >                       }
  32. >   return(return_number);
  33. >}
  34. >Now with this function, the printf line will display 0 for the first one
  35. >and garbage for the second one..  I then thought if I made the variable
  36. >return_number a static variable it would have fixed it but then when i
  37. >made the change the printf line would give me zero for both of them.  Any
  38. >ideas?
  39.  
  40. Hmmm, a former Pascal programmer?
  41.  
  42. How about this:
  43.  
  44. int num(int index)
  45. {  int r=-1;    /* initialized just to be sure that something valid
  46.                    is returned when index does not match any case */
  47.    switch(index)
  48.    {
  49.       case 0:
  50.          r=0;
  51.          break; /* you forgot this one */
  52.       case 1:
  53.          r=1;  
  54.          break; /* no break needed here, but included so that things
  55.                    don't go wrong when more cases are added */
  56.    }
  57.    return r;    /* no braces needed: return is NOT a function call */
  58. }
  59.  
  60. No need for static variables in this program.  Generally, you can't
  61. be certain which function call is evaluated first, so something like
  62. this is a Bad Thing (assuming the same printf statement in main()):
  63.  
  64. int num(int index)
  65. {  static int r=0;
  66.  
  67.    r=r+index;
  68.  
  69.    return r;
  70. }
  71.  
  72. If the first call to num() is done first, printf prints 
  73. "First Number is 0 , the Second s 1 ", but when the second call
  74. is evaluated first, the result is "First Number is 1 , the Second s 1 "
  75.  
  76. Frank
  77. --
  78. The famous GIICM now on line:  http://www.xs4all.nl/~falstaff/GIICM.html
  79. ------------------------------------------------------------------------
  80. Frank A. Vorstenbosch        +31-(70)-355 5241        falstaff@xs4all.nl
  81.